/********************************************************************************
 *      Copyright:  (C) 2021 Simply myself<1239726156@qq.com>
 *                  All rights reserved.
 *
 *       Filename:  mult_thread.h
 *    Description:  This head file 
 *
 *        Version:  1.0.0(2021年08月09日)
 *         Author:  Simply myself <1239726156@qq.com>
 *      ChangeLog:  1, Release initial version on "2021年08月09日 16时19分13秒"
 *                 
 ********************************************************************************/

#ifndef _MULT_THREAD_H_
#define _MULT_THREAD_H_

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <ctype.h>

#include "mosquitto.h"
#include "cjson/cJSON.h"


#include "my_ds18b20.h"
#include "my_cjson_parse.h"
#include "my_ini_parser.h"
#include "my_sqlite.h"

/* 定义一个函数类型 */
typedef void *(THREAD_FUNC) (void *);

/* 创建一个相分离的线程 */
int thread_start(pthread_t *tid, THREAD_FUNC *thread_workfunc, void *thread_arg);

/* 订阅子线程函数 */
void *sub_thread_func(void *thread_arg);
/* 订阅者连接回调函数 */
void sub_on_connect(struct mosquitto *mosq, void *obj, int rc);
/* 连接断开回调函数，目前只用作连接断开的提示 */
void sub_on_disconnect(struct mosquitto *mosq, void *obj, int rc);
/* 订阅回调函数，目前只用作订阅成功的提示 */
void sub_on_subscribe(struct mosquitto *mosq, void *obj, int mid, int qos_count, const int *granted_qos);
/* 消息回调函数，包含解析payload */
void sub_on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message);

/* 发布子线程函数 */
void *pub_thread_func(void *thread_arg);
/* 连接回调函数，采用短连接，连接成功后，发布消息，随即断开连接 */
void pub_on_connect(struct mosquitto *mosq, void *obj, int rc);
/* 连接断开回调函数，目前只用作断开连接的提示 */
void pub_on_disconnect(struct mosquitto *mosq, void *obj, int rc);
/* 发布回调函数，说明消息已发布成功，从数据库中删除数据 */
void pub_on_publish(struct mosquitto *mosq, void *obj, int mid);
/* 上报温度信息的函数 */
int upload(struct mosquitto *mosq, struct mqtt_s *mqtt);

#endif
